package com.cty._05_Ability._57_01_TwoNumbersWithSum;

/**
 * @Auther: cty
 * @Date: 2020/7/23 9:49
 * @Description: 面试题57（一）：和为s的两个数字
 * 题目：输入一个递增排序的数组和一个数字s，在数组中查找两个数，使得它们
 * 的和正好是s。如果有多对数字的和等于s，输出任意一对即可。
 * @version: 1.0
 */
public class TwoNumbersWithSum {

    private static int num1;
    private static int num2;
    // O(N)
    public static void printTwoNumbersWithSum(int[] sortedArray, int s){
        num1 = 0;
        num2 = 0;
        twoNumbersWithSum(sortedArray, s);
        if(num1==0 && num2==0)
             return;
        System.out.println("和为 " + s + " 的两个数为：" + num1 + "、" + num2);
    }  // end printTwoNumbersWithSum()

    private static void twoNumbersWithSum(int[] sortedArray, int s){
        if(sortedArray == null || sortedArray.length<2)
            return;

        int lowerPtr = 0;
        int upperPtr = sortedArray.length - 1;
        while(lowerPtr < upperPtr){
            int sum = sortedArray[lowerPtr] + sortedArray[upperPtr];
            if(sum == s){
                num1 = sortedArray[lowerPtr];
                num2 = sortedArray[upperPtr];
                break;
            }else if(sum > s)
                upperPtr--;
            else
                lowerPtr++;
        }  // end while
    }  // end twoNumbersWithSum()

}  // end class
